package com.fangs.lunbotu.banner;

import android.util.Log;
import android.view.View;
import android.view.ViewGroup;

import androidx.viewpager.widget.PagerAdapter;

import java.util.ArrayList;
import java.util.List;

public class BannerViewAdapter extends PagerAdapter {

    private List<View> listBean;
    private OnClicked onClicked;


    public BannerViewAdapter(List<View> list) {
        if (list == null) {
            list = new ArrayList<>();
        }
        setDataList(list);
    }

    public void setDataList(List<View> list) {
        this.listBean = list;
    }

    //数量
    @Override
    public int getCount() {
        return listBean.size();
    }

    //判断是否是否为同一张图片（ui），这里返回方法中的两个参数做比较就可以
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    //设置viewpage内部东西的方法，如果viewpage内没有子控件 滑动产生不了动画效果
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        View view = listBean.get(position);
        view.setOnClickListener(v -> {
            if (onClicked != null) {
                Log.e("————", "——不空——" + (position - 1));
                // 此处 针对Banner中setDataList循环数组将首尾各加一条数据情况 将角标做对应处理
                int p = listBean.size() == 1 ? position :
                        (position == 0 ? listBean.size() - 3 : (position == listBean.size() - 1 ? 0 : position - 1));
                onClicked.onItemClicked(p);
            } else {
                Log.e("————", "——空——" + (position - 1));
            }
        });
        container.addView(view);
        return view;
    }

    //因为它默认是看三张图片，第四张图片的时候就会报错，还有就是不要返回父类的作用
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }

    //刷新ViewPager时缓存页面默认是不会刷新的， 只有将PagerAdapter的getItemPosition方法,
    // 返回值改为POSITION_NONE时才会刷新， 但是如果都改为POSITION_NONE的话，那开销有点大
    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

    public void setOnClicked(OnClicked clicked) {
        onClicked = clicked;
    }

    public interface OnClicked {
        void onItemClicked(int positions);
    }

}